package com.xbongbong.formula.qlexpress.operator.date;

import com.ql.util.express.Operator;
import com.xbongbong.formula.constant.Constant;
import com.xbongbong.paas.toolbox.exception.XbbException;
import com.xbongbong.paas.toolbox.util.DateTimeUtil;
import com.xbongbong.paas.toolbox.util.PaasDateUtil;
import com.xbongbong.pro.enums.ErrorCodeEnum;
import com.xbongbong.pro.enums.errorcodes.BusinessRuleErrorCodeEnum;
import org.apache.commons.lang3.StringUtils;

import java.util.Objects;

/**
 * @author 吴峰
 * @version v1.0
 * @date 2019/8/9 9:51
 * @since v1.0
 */
public class OperatorDays extends Operator {


    public OperatorDays(String name){
        this.name = name;
    }

    public OperatorDays(String aliasName, String aName, String errorInfo){
        this.aliasName = aliasName;
        this.name = aName;
        this.errorInfo = errorInfo;
    }

    /**
     * DAYS函数可以返回两个日期之间相差的天数。
     * 语法：DAYS(end_date,start_date)
     * 说明：返回两个日期之间的天数差值，精确到两位小数。end_date为结束日期，start_date为开始日期
     * 例如：录入【生产时间】、【到期时间】，通过DAYS函数自动填入【有效天数】。
     * @param list
     * list[0] 起始时间
     * list[1] 结束时间
     */
    @Override
    public Object executeInner(Object[] list) throws XbbException {
        if (Objects.isNull(list) || list.length < Constant.LENGTH) {
            throw new XbbException(BusinessRuleErrorCodeEnum.API_ERROR_261007);
        }

        Long startTime = list[1] == null || StringUtils.equals(list[1].toString(), Constant.ZERO_STRING) ? 0L : PaasDateUtil.getInt(list[1]);
        Long endTime = list[0]  == null || StringUtils.equals(list[0].toString(), Constant.ZERO_STRING) ? 0L : PaasDateUtil.getInt(list[0]);
        return DateTimeUtil.differenceInDays(startTime, endTime);
    }
}
